const User = require('../models/User');
const bcrypt = require('bcryptjs');
const { Op } = require('sequelize');

// 用户列表（仅管理员）
exports.list = async (req, res) => {
  try {
    const page = parseInt(req.query.page, 10) || 1;
    const pageSize = parseInt(req.query.pageSize, 10) || 10;
    const keyword = req.query.keyword || '';
    const where = keyword ? {
      username: { [Op.like]: `%${keyword}%` }
    } : {};
    const { count, rows } = await User.findAndCountAll({
      where,
      offset: (page - 1) * pageSize,
      limit: pageSize,
      order: [['created_at', 'DESC']]
    });
    res.json({ total: count, list: rows });
  } catch (err) {
    res.status(500).json({ msg: '获取用户列表失败', err });
  }
};

// 查询单个用户详情（管理员或本人）
exports.detail = async (req, res) => {
  try {
    const { id } = req.params;
    if (req.user.role !== 'admin' && req.user.id != id) {
      return res.status(403).json({ msg: '无权查看该用户' });
    }
    const user = await User.findByPk(id);
    if (!user) return res.status(404).json({ msg: '用户不存在' });
    res.json(user);
  } catch (err) {
    res.status(500).json({ msg: '获取用户详情失败', err });
  }
};

// 新增用户（仅管理员）
exports.create = async (req, res) => {
  try {
    const { username, password, address, contact, user_type, role } = req.body;
    const exist = await User.findOne({ where: { username } });
    if (exist) return res.status(400).json({ msg: '用户名已存在' });
    const hash = await bcrypt.hash(password, 10);
    const user = await User.create({ username, password: hash, address, contact, user_type, role });
    res.json({ msg: '用户创建成功', user: { id: user.id, username: user.username } });
  } catch (err) {
    res.status(500).json({ msg: '用户创建失败', err });
  }
};

// 编辑用户（管理员可改所有，普通用户只能改自己）
exports.update = async (req, res) => {
  try {
    const { id } = req.params;
    if (req.user.role !== 'admin' && req.user.id != id) {
      return res.status(403).json({ msg: '无权修改该用户' });
    }
    const { address, contact, user_type, role, password } = req.body;
    const user = await User.findByPk(id);
    if (!user) return res.status(404).json({ msg: '用户不存在' });
    if (address !== undefined) user.address = address;
    if (contact !== undefined) user.contact = contact;
    if (user_type !== undefined && req.user.role === 'admin') user.user_type = user_type;
    if (role !== undefined && req.user.role === 'admin') user.role = role;
    if (password) user.password = await bcrypt.hash(password, 10);
    await user.save();
    res.json({ msg: '用户信息更新成功', user });
  } catch (err) {
    res.status(500).json({ msg: '用户信息更新失败', err });
  }
};

// 删除用户（仅管理员）
exports.remove = async (req, res) => {
  try {
    const { id } = req.params;
    if (req.user.role !== 'admin') {
      return res.status(403).json({ msg: '无权删除用户' });
    }
    const user = await User.findByPk(id);
    if (!user) return res.status(404).json({ msg: '用户不存在' });
    if (user.role === 'admin') return res.status(400).json({ msg: '禁止删除管理员账号' });
    await user.destroy();
    res.json({ msg: '用户删除成功' });
  } catch (err) {
    res.status(500).json({ msg: '用户删除失败', err });
  }
};

// 查询当前登录用户信息
exports.me = async (req, res) => {
  try {
    const user = await User.findByPk(req.user.id);
    if (!user) return res.status(404).json({ msg: '用户不存在' });
    res.json(user);
  } catch (err) {
    res.status(500).json({ msg: '获取当前用户信息失败', err });
  }
};
